<?php 
/**
 * 
 * Abstracte klasse voor files
 * @author Ferry Guikema
 *
 */

abstract class File_abs {
	
	/*** webfy ***/
	protected $webfy;
	
	public function __construct($webfy)
	{
		$this->webfy = $webfy;
	} # ctor
	
	/**
	 * 
	 * Maak een bestand / folder aan
	 * @param String $filename
	 */
	abstract public function create($filename);

	/**
	 * 
	 * Verwijder een bestand / folder
	 * @param String $file
	 */
	abstract public function remove($file);
	
	/**
	*
	* Kopier een bestand / folder
	* @param String $file
	* @param String $new_filename
	*/
	abstract public function copy($file, $newFile);
	
	/**
	 * 
	 * Hernoem een bestand / folder
	 * @param String $old_file
	 * @param String $new_file
	 */
	public function rename($oldFile, $newFile)
	{
		$this->move($oldFile, $newFile);
	} # func rename
			
	/**
	*
	* Verplaats een bestand / folder
	* Deze functie wordt ook gebruikt voor het hernoemen
	* 
	* @param String $old_file		(huidge folder locatie)
	* @param String $new_file		(nieuwe folder locatie)
	*/
	public function move($oldFile, $newFile)
	{	
		/*** controleer gebruikers rechten ***/
		if ( !$this->webfy->usercontrol->hasRights($this->getDir($oldFile), 'delete') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['delete']);
		}
		else if ( !$this->webfy->usercontrol->hasRights($this->getDir($newFile), 'write') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['write']);
		}
		/*** probeer bestand te verplaatsen ***/
		else if ( rename($this->webfy->settings->global['root_path'] .'/'. $oldFile, $this->webfy->settings->global['root_path'] .'/'. $newFile ) )
		{
			$this->webfy->out = Array('code'	=> '1',
									  'melding'	=> $this->webfy->settings->file['moved']);
		}
		/*** Onbekende fout ***/
		else
		{
			$this->webfy->out = Array('code'	=> '0',
									  'melding'	=> $this->webfy->settings->file['not_moved']);
		}
	} # func move
	
	/**
	*
	* Kijk of er gereserveerde characters in de string zitten
	* @param String $str
	* @return boolean
	*/
	public function checkReservedChars($str)
	{
		/*** niet toegestaande tekens ***/
		$reserved = Array('\\', '?', '%', '*', ':', '\'', '"', '<', '>', '.');
		/*** zet string om naar een array ***/
		$str = str_split($str);
		/*** zit er een reserved character in de string ***/
		foreach ($str as $s)
			foreach ($reserved as $r)
			if ($s == $r)
				return false;
		return true;
	} # func checkReservedChars

	/**
	 * Return de folder path 
	 * @param String $file
	 * @return String 
	 */ 
	public function getDir($file)
	{
		$file = $this->webfy->settings->global['root_path'] .''. $file; 

		/*** is geen folder maar wel een bestand ***/
		if ( !is_dir( $file ) && is_file( $file ) )
		{ 
			$file = str_replace($this->webfy->settings->global['root_path'], '',dirname( $file ) );
			if ( strlen($file) > 0 && $file[0] == '/' )
				$file = substr($file, 1);
			return $file;
		}
		/*** is een folder ***/
		else if ( is_dir( $file ) )
		{
			return str_replace($this->webfy->settings->global['root_path'].'', '', $file);
		}
		/*** return folder van nog niet bestaand bestand ***/
		else
		{
			$file = substr($file, 0, strrpos($file, '/') );
			$file = str_replace($this->webfy->settings->global['root_path'].'', '',$file );

			return $file;
		}
	} # func getDir
}

?>
